import 'package:flutter/material.dart';
import 'package:flutter_study/flutter/_16App%E6%B5%8B%E8%AF%95/widgettest_contacts.dart';
import 'package:flutter_test/flutter_test.dart';

/// widget测试
void main() {
  testWidgets('Test contacts widget', (WidgetTester tester) async {
    // 注入Widget，因为测试没有runApp，使用该方法运行时app
    // Scaffold无法直接展示在页面，需要MaterialApp初始化一些环境
    await tester
        .pumpWidget(MaterialApp(home: ContactsWidget(["fauks", "jay", "mj"])));

    // 在widget中查找指定widget/Text文本
    final jayText = find.text('jay');
    final icons = find.byIcon(Icons.people);

    // 表示查找对应的文本要找到多少，期望一个
    expect(jayText, findsOneWidget);
    // 断言没有指定小部件
    // expect(jayText, findsNothing);
    // 期望3个对应的Icon Widget，因为有3条记录
    expect(icons, findsNWidgets(3));

    // 模拟测试点击
    final actionChipLabelText = find.text("0");
    // 应该有3个文本为0的控件
    expect(actionChipLabelText, findsNWidgets(3));
    // 查找ActionChip控件
    final actionShip = find.byType(ActionChip);
    // 模拟点击
    await tester.tap(actionShip.first);
    // 刷新控件状态
    await tester.pump();

    // 此时有3个文本为1的小空间,0个文本为0的空间
    final actionChipLabelText1 = find.text("1");
    expect(actionChipLabelText1, findsNWidgets(3));
    expect(actionChipLabelText, findsNothing);
  });
}
